Previously, most applications were executed on a server, which would be shared by multiple clients. The clients would interact with the server through a graphical interface. With the popularity of Web 2.0 technology, and browser pages enhanced with embedded scripting languages, such as JavaScript™, an increasing number of applications are being executed directly on the client. Most lightweight script-enhanced pages, however, do not have a software extension or “plug-in” that would facilitate writing to a memory of sufficient size, and only have access to a comparatively small cache memory. Moreover, although client-based application execution can result in applications that execute faster than if the same application is run on a server, the inability to store a sufficiently long history of application execution limits efficient debug of errant applications running on the client.
The problem of efficient debug is further exacerbated by difficulty in providing client-based data security, so the user does not access or change data that should be protected, without adding excessive software overhead. Further, flexible scripting languages like JavaScript™ complicate application debug, because the flexibility facilitates unintentional combinations of data types that can lead to errors.